//package com.plian.system.service.fr.enterprise;
//
//import com.alibaba.fastjson.JSON;
//import com.fasterxml.jackson.databind.ObjectMapper;
//import com.plian.Tools.StringUtil;
//import com.plian.Tools.TokenUtil;
//import com.plian.Tools.UuidUtil;
//import com.plian.Tools.pagedata.PageData;
//import com.plian.system.config.exception.MyRuntimeException;
//import com.plian.system.constant.baseinfo.ValueSetConstant;
//import com.plian.system.constant.sys.FormTypeConstant;
//import com.plian.system.dao.fr.enterprise.EnterpriseDao;
//import com.plian.system.entity.fr.enterprise.Enterprise;
//import com.plian.system.entity.sys.FormHistoryRecord;
//import com.plian.system.model.CommonCode;
//import com.plian.system.model.ListResult;
//import com.plian.system.model.ObjResult;
//import com.plian.system.model.page.Page;
//import com.plian.system.service.bt.baseinfo.BaseInfoService;
//import com.plian.system.service.sys.code.IFormCodeService;
//import com.plian.system.service.sys.system.IFormHistoryRecordService;
//import com.plian.system.service.wf.FormWorkflowService;
//import com.plian.system.vo.fr.enterprise.EnterpriseVO;
//import com.plian.system.wrapper.fr.enterprise.EnterpriseWrapper;
//import lombok.AllArgsConstructor;
//import org.apache.commons.lang.exception.ExceptionUtils;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//
//import java.util.*;
//
//import static com.plian.system.constant.sys.FormStatusConstant.*;
//
//@Service
//@AllArgsConstructor
//public class EnterpriseService {
//    private static final Logger log = LoggerFactory.getLogger(EnterpriseService.class);
//
//   private EnterpriseDao enterpriseDao;
//
//    private FormWorkflowService formWorkflowService;
//
//    private IFormCodeService formCodeService;
//
//    private IFormHistoryRecordService formHistoryRecordService;
//
//    private EnterpriseWrapper enterpriseWrapper;
//
//
//    //保存
//    public ObjResult save(PageData pd){
//
//        try {
//            pd.put("id", UuidUtil.get32UUID());
//            pd.put("updateTime",new Date());
//            pd.put("orgId", TokenUtil.getTokenOrgId());
//            pd.put("formType", FormTypeConstant.FR_ENTERPRISE);
//            pd.put("code", formCodeService.getCode(FormTypeConstant.FR_ENTERPRISE));
//            enterpriseDao.save(pd);
//
//            HashMap<String, Object> processVariable = new HashMap<>();
//            formWorkflowService.startProcessAndSimulate(pd.getString("id"),pd.getString("formType"),processVariable);
//
//            return new ObjResult(CommonCode.SUCCESS);
//        } catch (Exception e) {
//            log.error(ExceptionUtils.getFullStackTrace(e));
//            throw new MyRuntimeException(new ObjResult(CommonCode.ERROR));
//        }
//    }
//
//    public ObjResult edit(PageData pd){
//        try {
//            String id=pd.getString("id");
//
//            Enterprise newEnterprise = JSON.parseObject(JSON.toJSONString(pd), Enterprise.class);
//            PageData old = enterpriseDao.findbyId(pd.getString("id"));
//            String oldJson =JSON.toJSONString(old);
//            Enterprise oldEnterprise = JSON.parseObject(oldJson, Enterprise.class);
//            pd.put("updateTime",new Date());
//            pd.put("initial_id",id);
//            pd.put("orgId", TokenUtil.getTokenOrgId());
//
//            if (!newEnterprise.equals(oldEnterprise)){
//                try{
//                    ObjectMapper mapper=new ObjectMapper();
//                    EnterpriseVO enterpriseVO =enterpriseWrapper.entityToVO(oldEnterprise);
//                    formHistoryRecordService.submit(FormHistoryRecord.builder().formType(String.valueOf(FormTypeConstant.FR_ENTERPRISE))
//                            .record(mapper.writeValueAsString(enterpriseVO)).recordId(id).build());
//                }catch (Exception e){
//                    log.error("员工档案--> 历史数据版本保存失败");
//                }
//
//            }
//            enterpriseDao.edit(pd);
//
//            return new ObjResult(CommonCode.SUCCESS);
//        } catch (Exception e) {
//            log.error(ExceptionUtils.getFullStackTrace(e));
//            throw new MyRuntimeException(new ObjResult(CommonCode.ERROR));
//        }
//    }
//
//    public ObjResult del_ids(PageData pd){
//        try {
//            List<String> ids= (List<String>) pd.get("ids");
//            enterpriseDao.edit_del_ids(ids);
//            return new ObjResult(CommonCode.SUCCESS);
//        } catch (Exception e) {
//            log.error(ExceptionUtils.getFullStackTrace(e));
//            throw new MyRuntimeException(new ObjResult(CommonCode.ERROR));
//        }
//    }
//    public ListResult listPage(PageData pd){
//        try {
//            pd.put("orgId",TokenUtil.getTokenOrgId());
//            Page page=new Page(true,pd);
//            page.setPd(pd);
//            List<PageData> l=enterpriseDao.listPage(page);
//            ListResult listResult= new ListResult(CommonCode.SUCCESS,page.getTotal());
//            listResult.setList(l);
//            return listResult;
//        } catch (Exception e) {
//            log.error(ExceptionUtils.getFullStackTrace(e));
//            throw new MyRuntimeException(new ObjResult(CommonCode.ERROR));
//        }
//    }
//    public ListResult reportList(PageData pd){
//        try {
//            Page page=new Page(false,pd);
//            page.setPd(pd);
//            List<PageData> l=enterpriseDao.reportList(page);
//            ListResult listResult= new ListResult(CommonCode.SUCCESS,page.getTotal());
//            listResult.setList(l);
//            return listResult;
//        } catch (Exception e) {
//            log.error(ExceptionUtils.getFullStackTrace(e));
//            throw new MyRuntimeException(new ObjResult(CommonCode.ERROR));
//        }
//    }
//
//    @Autowired
//    private BaseInfoService baseInfoService;
//    public ObjResult findbyId(PageData pd){
//        try {
//            PageData p=enterpriseDao.findbyId(pd.getString("id"));
//
//            Map<String, String> functionalMap = baseInfoService.getChildMap(ValueSetConstant.FUNCTIONAL_CATEGORY);
//            if (p != null){
//                String functionalClassification = p.getString("functionalClassification");
//                if (StringUtil.isNotBlank(functionalClassification) && functionalMap.containsKey(functionalClassification)){
//                    p.put("functionalClassificationName", functionalMap.get(functionalClassification));
//                }
//            }
//
//            ObjResult objResult= new ObjResult(CommonCode.SUCCESS);
//            objResult.setPageData(p);
//            return objResult;
//        } catch (Exception e) {
//            log.error(ExceptionUtils.getFullStackTrace(e));
//            throw new MyRuntimeException(new ObjResult(CommonCode.ERROR));
//        }
//    }
//
//    public PageData findByOrgId(String orgId){
//        try {
//            PageData p = enterpriseDao.findbyOrg(orgId);
//            if (p == null){
//                return null;
//            }
//            Map<String, String> codeMap = baseInfoService.getChildMap(ValueSetConstant.ROOT);
//            if (p != null){
//                String functionalClassification = p.getString("functionalClassification");
//                if (StringUtil.isNotBlank(functionalClassification) && codeMap.containsKey(functionalClassification)){
//                    p.put("functionalClassificationName", codeMap.get(functionalClassification));
//                }
//
//                String scaleOperation = p.getString("scaleOperation");
//                if (StringUtil.isNotBlank(scaleOperation) && codeMap.containsKey(scaleOperation)){
//                    p.put("scaleOperationName", codeMap.get(scaleOperation));
//                }
//
//                String isEnterprise = p.getString("isEnterprise");
//                if (StringUtil.isNotBlank(isEnterprise) && codeMap.containsKey(isEnterprise)){
//                    p.put("isEnterpriseName", codeMap.get(isEnterprise));
//                }
//
//                String businessSector = p.getString("businessSector");
//                if (StringUtil.isNotBlank(businessSector) && codeMap.containsKey(businessSector)){
//                    p.put("businessSectorName", codeMap.get(businessSector));
//                }
//
//                String administrativeAreas = p.getString("administrativeAreas");
//                if (StringUtil.isNotBlank(administrativeAreas) && codeMap.containsKey(administrativeAreas)){
//                    p.put("administrativeAreasName", codeMap.get(administrativeAreas));
//                }
//
//                String industry = p.getString("industry");
//                if (StringUtil.isNotBlank(industry) && codeMap.containsKey(industry)){
//                    p.put("industryName", codeMap.get(industry));
//                }
//            }
//            return p;
//        }catch (Exception e){
//            log.error(ExceptionUtils.getFullStackTrace(e));
//            throw new MyRuntimeException(new ObjResult(CommonCode.ERROR));
//        }
//    }
//
//    public EnterpriseVO getDetailVO(Object id){
//        try {
//            PageData pd = new PageData();
//            pd.put("id", id);
//            PageData p = enterpriseDao.findbyId(pd.getString("id"));
//            String json = JSON.toJSONString(p);
//            Enterprise enterprise = JSON.parseObject(json, Enterprise.class);
//            return enterpriseWrapper.entityToVO(enterprise);
//        } catch (Exception e) {
//            log.error("" + e);
//            throw new MyRuntimeException(new ObjResult(CommonCode.ERROR));
//        }
//    }
//
//    /**
//     * 提交单据
//     * @param formId 单据id
//     */
//    public HashMap<String,Object> submit(String formId) throws Exception {
//        PageData pageData = new PageData();
//        pageData.put("status", String.valueOf(FLOW));
//        ArrayList<String> ids = new ArrayList<>();
//        ids.add(formId);
//        pageData.put("id", ids);
//        enterpriseDao.refer(pageData);
//
//        //将需要提交的流程变量返回，用于工作流侧
//        return new HashMap<String,Object>();
//    }
//
//    /**
//     * 退回单据
//     * @param formId 单据id
//     */
//    public void reject(String formId, int formState) throws Exception {
//        PageData pageData = new PageData();
//        pageData.put("status", String.valueOf(formState));
//        pageData.put("id", Collections.singletonList(formId));
//        enterpriseDao.refer(pageData);
//    }
//
//    /**
//     * 单据完成后
//     * @param formId
//     */
//    public void finish(String formId) {
//        try {
//            PageData pageData = new PageData();
//            pageData.put("status", String.valueOf(FINISH));
//            pageData.put("id", Collections.singletonList(formId));
//            enterpriseDao.refer(pageData);
//        } catch (Exception e) {
//            log.error(ExceptionUtils.getFullStackTrace(e));
//            throw new MyRuntimeException(new ObjResult("单据流转完成时修改单据状态失败！"));
//        }
//    }
//
//    /**
//     *
//     * @param formIds 单据ids
//     */
//    public List<PageData> findByIds(List<String> formIds) {
//        try {
//            PageData pageData = new PageData();
//            pageData.put("ids", formIds);
//            return enterpriseDao.findbyIds(pageData);
//        } catch (Exception e) {
//            log.error(ExceptionUtils.getFullStackTrace(e));
//            throw new MyRuntimeException(new ObjResult("根据单据id列表查询报表失败！"));
//        }
//    }
//
//    public void goBackToStash(String formId) {
//        try {
//            PageData pageData = new PageData();
//            pageData.put("status", String.valueOf(UNREVIEWED));
//            pageData.put("id", Collections.singletonList(formId));
//            enterpriseDao.refer(pageData);
//        } catch (Exception e) {
//            log.error(ExceptionUtils.getFullStackTrace(e));
//        }
//    }
//}
